package org.spring.core.io;

import java.io.IOException;
import java.io.InputStream;

/**
 * 作为 {@link InputStream} 源的对象的简单接口。
 * <p>
 * 这是 Spring 更广泛的 {@link Resource} 接口的基本接口。
 *
 * @author 李坤
 * @date 2022/4/13 15:43
 */
public interface InputStreamSource {

    /**
     * 返回底层资源内容的 {@link InputStream}。
     * <p>
     * 预计每次调用都会创建一个 <i>fresh<i> 流。
     * <p>
     * 当您考虑像 JavaMail 这样的 API 时，这个要求尤其重要，它需要能够在创建邮件附件时多次读取流。
     * 对于这样的用例，每个 {@code getInputStream()} 调用返回一个新流是<i>必需<i>。
     *
     * @return 底层资源的输入流（不能是 {@code null}）
     *
     * @throws java.io.FileNotFoundException 如果底层资源不存在
     * @throws IOException                   如果内容流无法打开
     */
    InputStream getInputStream() throws IOException;

}
